package com.beta.auth.config;

import com.beta.auth.utils.SM4Helper2;
import lombok.Data;
import org.springframework.beans.factory.InitializingBean;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.stereotype.Component;

/**
 * <p>userCenter/wxworkmsg.config.CfgSelfRefreshBean</p>
 *
 * @description 配置数据
 * @author: zdwang
 * @date 2021/11/29 16:36
 */
@Component
@RefreshScope
@Data
public class UserAuthCfgBean implements InitializingBean {

    /**
     * 公司ID
     */
    @Value("${auth.corpId}")
    private String corpId;

    /**
     * secretKey
     */
    @Value("${auth.secretKey}")
    private String secretKey;

    /**
     * 自建应用ID
     */
    @Value("${auth.agentId}")
    private String agentId;

    /**
     * returnUrl
     */
    @Value("${auth.redirectUrl}")
    private String redirectUrl;

    /**
     * 微信鉴权地址
     */
    @Value("${auth.wxAuthUrl}")
    private String wxAuthUrl;

    /**
     * 第三方appId
     */
    @Value("${auth.third.corpId}")
    private String thirdAppId;

    /**
     * secretKey
     */
    @Value("${auth.third.secret}")
    private String thirdSecretKey;

    /**
     * 开发者重定向URL
     */
    @Value("${auth.develperRedirectUrl}")
    private String develperRedirectUrl;

    @Value("${auth.cookie.domain}")
    private String cookieDomain;

    @Value("${auth.accessTokenUrl:https://qyapi.weixin.qq.com/cgi-bin/gettoken}")
    private String accessTokenUrl;

    /**
     * 获取下游的accessToken
     */
    @Value("${auth.corp.group.access.token.url:https://qyapi.weixin.qq.com/cgi-bin/corpgroup/corp/gettoken?access_token=}")
    private String corpGroupAccessTokenUrl;

    @Value("${auth.userInfoUrl:https://qyapi.weixin.qq.com/cgi-bin/auth/getuserinfo}")
    private String userInfoUrl;

    @Value("${auth.userIdConvertOpenIdUrl:https://qyapi.weixin.qq.com/cgi-bin/user/convert_to_openid?access_token=}")
    private String userIdConvertOpenIdUrl;

    @Value("${auth.getAgentTicketUrl:https://qyapi.weixin.qq.com/cgi-bin/ticket/get}")
    private String getAgentTicketUrl;

    @Value("${auth.getJsapiTicketUrl:https://qyapi.weixin.qq.com/cgi-bin/get_jsapi_ticket}")
    private String getJsapiTicketUrl;

    @Value("${auth.getUserDetailUrl:https://qyapi.weixin.qq.com/cgi-bin/auth/getuserdetail}")
    private String userDetailUrl;

    /**
     * 是否需要将userId转换为openId
     */
    @Value("${auth.enableOpenId:true}")
    private boolean enableOpenId;

    /**
     * 自建应用基础授权过期时间，单位天
     */
    @Value("${auth.base.expire:1}")
    private int baseAuthExpire;

    /**
     * 自建应用高级授权过期时间，单位天
     */
    @Value("${auth.userInfo.expire:30}")
    private int uerInfoAuthExpire;

    /**
     * 是否下载头像，base64存储本地表
     */
    @Value("${auth.userInfo.avatarDownload:false}")
    private boolean userAvatarDownload;

    /**
     * 头像地址主机名映射，适用于需要正向代理访问外网的场景，JSON格式
     * 例如：
     *  原来的地址为：https://wework.qpic.cn
     *  配置为：http://wework.qpic.cn 则可以通过本机host配置内网的正向代理，进而通过代理访问外网
     *  配置格式为：{"https://wework.qpic.cn":"http://wework.qpic.cn"}
     *  已知配置：{"https://wx.qlogo.cn":"http://wx.qlogo.cn","https://wework.qpic.cn":"http://wework.qpic.cn","https://open.work.weixin.qq.com":"http://open.work.weixin.qq.com","https://hp.qpic.cn":"http://hp.qpic.cn","https://p.qlogo.cn":"http://p.qlogo.cn","https://p.qpic.cn":"http://p.qpic.cn","https://mmhead.hk.wechat.com":"http://mmhead.hk.wechat.com","https://mmhead.c2c.wechat.com":"http://mmhead.c2c.wechat.com"}
     */
    @Value("${auth.userInfo.avatarUrlHostMapping:}")
    private String avatarUrlHostMapping;


    /**
     * 公众号授权接口host配置，适用于需要正向代理访问外网的场景。
     * 例如：
     *  原来的地址为：https://api.weixin.qq.com
     *  配置为：http://api.weixin.qq.com 则可以通过本机host配置内网的正向代理，进而通过代理访问外网
     */
    @Value("${auth.mp.apiHost:}")
    private String apiHost;

//    @Value("${auth.mp.openHost:}")
//    private String openHost;
//
//    @Value("${auth.mp.mpHost:}")
//    private String mpHost;

    /**
     * 公众号授权相关配置
     */
    @Value("${auth.mp.appId:wx6a6528263ee21094}")
    private String mpAppId;

    @Value("${auth.mp.secretKey:ba6a43a1c6dcb055a762160a0cdcfc8b}")
    private String mpAppSecret;

    @Value("${auth.mp.redirectUrl:http://msgnj.test.betawm.com/wx/Auth}")
    private String mpRedirectUrl;

    @Value("${auth.mp.base.expire:1}")
    private int mpBaseAuthExpire;

    @Value("${auth.mp.userInfo.expire:30}")
    private int mpUerInfoAuthExpire;

    @Value("${safe.hosts:https://open.weixin.qq.com,https://eoaptest.cebbank.com,https://qyapi.weixin.qq.com,https://api.weixin.qq.com,https://apiext2-qa.betawm.com,https://apiclue2-qa.betawm.com,https://apiext2-pre.betawm.com,https://apiclue2-pre.betawm.com,https://apiext2.betawm.com,https://apiclue2.betawm.com}")
    private String[] safeHosts;

    /**
     * 会话有效期，超过有效期无新请求强制使bjwt失效，默认30分钟
     */
    @Value("${session.max.interval:1800}")
    private long sessionMaxInterval;

    /**
     * 企微授权生成jwt密钥，一般情况下无需在配置中心配置或修改
     */
    @Value("${auth.jwt.secret:$R#E@W!Q}")
    private String jwtSecret;

    /**
     * 微信授权生成jwt密钥，一般情况下无需在配置中心配置或修改
     */
    @Value("${auth.mp.jwt.secret:$R#E@W!W}")
    private String mpJwtSecret;

    /**
     * 企微授权生成signet密钥，一般情况下无需在配置中心配置或修改
     */
    @Value("${auth.aes.key:12345qazwsx67890}")
    private String authAesKey;

    /**
     * sm4算法加密密钥，一般情况下无需在配置中心配置或修改
     */
    @Value("${auth.sm4.key:scrm001234567890}")
    private String sm4Key;

    @Override
    public void afterPropertiesSet() throws Exception {
        SM4Helper2.init(getSm4Key());
    }
}
